﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using BL = class_BL;
using EN = class_Entidad;
using System.ComponentModel;

namespace WebMenu.Pagina.Mantenimiento
{
    public partial class frmRecetaEdicion : System.Web.UI.Page
    {
        public void CrearTablaTemporal()
        {
            DataTable tbIngrediente = new DataTable("Ingrediente");
            tbIngrediente.Columns.Add("ID_TPROD", typeof(Int32));
            tbIngrediente.Columns.Add("ID_PRODUCTO", typeof(Int32));
            tbIngrediente.Columns.Add("DESC_TPROD", typeof(string));
            tbIngrediente.Columns.Add("NOM_PROD", typeof(string));
            ViewState["Ingrediente"] = tbIngrediente;
        }

        public void cargarTipoPlato()
        {
            List<EN.ITEMS_EN> lista = new List<EN.ITEMS_EN>();
            EN.ITEMS_EN objItem = new EN.ITEMS_EN();
            objItem.ID_ITEMS = 0;
            objItem.DESC_ITEMS = "";
            objItem.ID_PADRE = 3;

            lista = BL.ITEMS_BL.ListaITEMSGrupo(objItem);
            foreach (var item in lista)
            {
                ddlTipo.Items.Add(new ListItem(Convert.ToString(item.DESC_ITEMS), Convert.ToString(item.ID_ITEMS)));
            }
        }

        public void cargarClasePlato()
        {
            List<EN.ITEMS_EN> lista = new List<EN.ITEMS_EN>();
            EN.ITEMS_EN objItem = new EN.ITEMS_EN();
            objItem.ID_ITEMS = 0;
            objItem.DESC_ITEMS = "";
            objItem.ID_PADRE = 7;

            lista = BL.ITEMS_BL.ListaITEMSGrupo(objItem);
            foreach (var item in lista)
            {
                ddlClase.Items.Add(new ListItem(Convert.ToString(item.DESC_ITEMS), Convert.ToString(item.ID_ITEMS)));
            }
        }

        public void cargarTipoProd()
        {
            List<EN.ITEMS_EN> lista = new List<EN.ITEMS_EN>();
            EN.ITEMS_EN objItem = new EN.ITEMS_EN();
            objItem.ID_ITEMS = 0;
            objItem.ID_PADRE = 1;
            objItem.DESC_ITEMS = "";

            try
            {
                lista = BL.ITEMS_BL.ListaITEMSGrupo(objItem);
                foreach (var item in lista)
                {
                    ddlTipoProd.Items.Add(new ListItem(Convert.ToString(item.DESC_ITEMS), Convert.ToString(item.ID_ITEMS)));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void cargaProd()
        {
            EN.PARAM_PRODUCTO_EN param = new EN.PARAM_PRODUCTO_EN();
            List<EN.PRODUCTO_EN> Lista = new List<EN.PRODUCTO_EN>();
            param.ID_PRODUCTO = 0;
            param.ID_TPROD = Convert.ToInt32(ddlTipoProd.SelectedValue);
            param.NOM_PROD = "";
            try
            {
                Lista = BL.PRODUCTO_BL.listaProducto(param);
                foreach (var item in Lista)
                {
                    ddlProd.Items.Add(new ListItem(Convert.ToString(item.NOM_PROD), Convert.ToString(item.ID_PRODUCTO)));
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public void AgregarIngrdiente()
        {
            DataTable tbIngrediente = new DataTable();
            DataRow fila;
            tbIngrediente = (DataTable)ViewState["Ingrediente"];
            tbIngrediente = tbIngrediente.Copy();
            fila = tbIngrediente.NewRow();
            fila["ID_TPROD"] = Convert.ToInt32(ddlTipoProd.SelectedValue);
            fila["ID_PRODUCTO"] = Convert.ToInt32(ddlProd.SelectedValue);
            fila["DESC_TPROD"] = ddlTipoProd.SelectedItem.Text;
            fila["NOM_PROD"] = ddlProd.SelectedItem.Text;
            tbIngrediente.Rows.Add(fila);
            ViewState["Ingrediente"] = tbIngrediente;

            gvProducto.DataSource = tbIngrediente;
            gvProducto.DataBind();
        }

        public void cargarRegistro()
        {
            EN.PARAM_RECETA_EN objParam = new EN.PARAM_RECETA_EN();
            List<EN.LST_RECETA_EN> lstReceta = new List<EN.LST_RECETA_EN>();
            List<EN.LST_RECETA_INGREDIENTE_EN> lstIngrediente = new List<EN.LST_RECETA_INGREDIENTE_EN>();

            objParam.ID_RECETA = Convert.ToInt32(hdId.Value);
            objParam.NOMBRE_REC = "";
            objParam.TIPO_PLATO = -2;
            objParam.CLASE_PLATO = -2;
            objParam.ID_PADTPROD = 1;
            lstReceta = BL.RECETA_BL.listaReceta(objParam);

            foreach(EN.RECETA_EN objReceta in lstReceta)
            {
                ddlTipo.SelectedValue = objReceta.TIPO_PLATO.ToString();
                ddlClase.SelectedValue = objReceta.CLASE_PLATO.ToString();
                txtRecetaE.Text = objReceta.NOMBRE_REC;
            }

            lstIngrediente = BL.RECETA_BL.ListaIngrediente(objParam);
            ViewState["Ingrediente"] = ConvertToDataTable(lstIngrediente);
            gvProducto.DataSource = ViewState["Ingrediente"];
            gvProducto.DataBind();

        }

        public DataTable ConvertToDataTable<T>(IList<T> data)
        {
            PropertyDescriptorCollection properties =
               TypeDescriptor.GetProperties(typeof(T));
            DataTable table = new DataTable();
            foreach (PropertyDescriptor prop in properties)
                table.Columns.Add(prop.Name, Nullable.GetUnderlyingType(prop.PropertyType) ?? prop.PropertyType);
            foreach (T item in data)
            {
                DataRow row = table.NewRow();
                foreach (PropertyDescriptor prop in properties)
                    row[prop.Name] = prop.GetValue(item) ?? DBNull.Value;
                table.Rows.Add(row);
            }
            return table;

        }

        protected void ActilzarLista()
        {
            gvProducto.DataSource = ViewState["Ingrediente"] as DataTable;
            gvProducto.DataBind();
        }

        public void Grabar()
        {
            int Id = Convert.ToInt32(hdId.Value);
            EN.RECETA_EN objReceta = new EN.RECETA_EN();

            DataTable dt = ViewState["Ingrediente"] as DataTable;
            List<EN.RECETA_INGREDIENTE_EN> listaProducto = new List<EN.RECETA_INGREDIENTE_EN>();


            foreach (DataRow dr in dt.Rows)
            {
                EN.RECETA_INGREDIENTE_EN objIngrediente = new EN.RECETA_INGREDIENTE_EN();
                objIngrediente.ID_TPROD = Convert.ToInt32(dr[0].ToString());
                objIngrediente.ID_PRODUCTO = Convert.ToInt32(dr[1].ToString());
                listaProducto.Add(objIngrediente);
            }
            try
            {
                if (Id == 0)
                {
                    objReceta.ID_RECETA = Id;
                    objReceta.NOMBRE_REC = txtRecetaE.Text;
                    objReceta.TIPO_PLATO = Convert.ToInt32(ddlTipo.SelectedValue);
                    objReceta.CLASE_PLATO = Convert.ToInt32(ddlClase.SelectedValue);
                    objReceta.EST_RECETA = 1;
                    objReceta.ListaIngrediente = listaProducto;
                    Id = BL.RECETA_BL.RegistroReceta(objReceta);
                }
                if (Id != 0)
                {
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ddlTipo.Items.Add(new ListItem("--Seleccionar--", "-2"));
                ddlClase.Items.Add(new ListItem("--Seleccionar--", "-2"));
                ddlTipoProd.Items.Add(new ListItem("--Seleccionar--", "-2"));
                ddlProd.Items.Add(new ListItem("--Seleccionar--", "-2"));
                hdId.Value = "7";
                cargarTipoPlato();
                cargarClasePlato();
                cargarTipoProd();
                CrearTablaTemporal();
                if (hdId.Value != "0")
                {
                    cargarRegistro();
                }
            }
        }

        protected void btnAgregar_Click(object sender, EventArgs e)
        {
            AgregarIngrdiente();
        }

        protected void ddlTipoProd_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (ddlTipoProd.SelectedValue == "-2")
            {
                ddlProd.Items.Clear();
                ddlProd.Items.Add(new ListItem("--Seleccionar--", "-2"));
            }
            else
            {
                ddlProd.Items.Clear();
                ddlProd.Items.Add(new ListItem("--Seleccionar--", "-2"));
                cargaProd();
            }
        }

        protected void gvProducto_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            int index = Convert.ToInt32(e.RowIndex);
            DataTable dt = ViewState["Ingrediente"] as DataTable;
            dt.Rows[index].Delete();
            ViewState["Ingrediente"] = dt;
            try
            {
                if (hdId.Value != "0")
                {
                    int accion = 0;
                    EN.RECETA_INGREDIENTE_EN obj = new EN.RECETA_INGREDIENTE_EN();
                    obj.ID_RECETA = Convert.ToInt32(hdId.Value);
                    obj.ID_TPROD = Convert.ToInt32(gvProducto.Rows[e.RowIndex].Cells[4].Text);
                    obj.ID_PRODUCTO = Convert.ToInt32(gvProducto.Rows[e.RowIndex].Cells[3].Text);
                    accion = BL.RECETA_BL.EliminarIngrediente(obj);
                }
                ActilzarLista();
            }
            catch (Exception ex)
            {                
                throw ex;
            }
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            Grabar();
        }
    }
}